Guava (Google Guava) Java-এর উপর ভিত্তি করে তৈরি একটি ওপেন-সোর্স লাইব্রেরি, যা Java Core Libraries-এর সীমাবদ্ধতাগুলি কাটিয়ে উঠতে এবং উন্নত বৈশিষ্ট্য প্রদানের জন্য ডিজাইন করা হয়েছে। Guava Java-এর Collections Framework, Concurrency Utilities, এবং অন্যান্য Core API-এর সাথে ঘনিষ্ঠভাবে সম্পর্কিত।
Guava এবং Java Core Libraries-এর সম্পর্কিত দিক
1. Collections Framework
- Java Core Libraries:
- Java Core Libraries Collections Framework (
java.util) ডেটা সংগ্রহ এবং ম্যানিপুলেশনের জন্য সরঞ্জাম প্রদান করে। এর মধ্যেList,Set,Map, এবং তাদের বিভিন্ন বাস্তবায়ন (e.g.,ArrayList,HashMap) অন্তর্ভুক্ত।
- Java Core Libraries Collections Framework (
- Guava Enhancements:
- Guava Collections Framework-কে উন্নত করতে নতুন ধরণের Immutable, Multimap, এবং BiMap প্রদান করে।
- Guava-এর Collections API সাধারণ কাজগুলোকে সহজ করে।
Example: Immutable Collections
import com.google.common.collect.ImmutableList;
public class GuavaExample {
public static void main(String[] args) {
ImmutableList<String> list = ImmutableList.of("A", "B", "C");
System.out.println(list); // Output: [A, B, C]
}
}
তুলনা:
- Java Core Collections-এ Mutable ও Immutable Collections এর জন্য আলাদা সমর্থন নেই (Java 9+ থেকে কিছু Immutable Collections যোগ করা হয়েছে)।
- Guava Immutable Collections কার্যকর এবং thread-safe।
2. Concurrency Utilities
- Java Core Libraries:
- Java Core
java.util.concurrentপ্যাকেজেExecutorService,Future, এবংCompletableFutureরয়েছে।
- Java Core
- Guava Enhancements:
- Guava
ListenableFutureএবংFuturesUtility প্রদান করে যা Java CoreFuture-এর তুলনায় আরও বেশি ফিচার সমৃদ্ধ। - এটি asynchronous কাজগুলিকে সহজ করে।
- Guava
Example: ListenableFuture
import com.google.common.util.concurrent.*;
import java.util.concurrent.*;
public class GuavaConcurrency {
public static void main(String[] args) throws Exception {
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(2));
ListenableFuture<Integer> future = service.submit(() -> {
TimeUnit.SECONDS.sleep(1);
return 10;
});
Futures.addCallback(future, new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
System.out.println("Result: " + result); // Output: Result: 10
}
@Override
public void onFailure(Throwable t) {
System.out.println("Error: " + t.getMessage());
}
}, service);
service.shutdown();
}
}
তুলনা:
- Java Core
Futureব্লকিং আচরণ করে, যেখানে GuavaListenableFuturecallback-এর মাধ্যমে non-blocking সমাধান প্রদান করে। - Guava
FuturesAPI asynchronous কাজ আরও modular করে।
3. Caching
- Java Core Libraries:
- Java Core Libraries-এ সরাসরি caching মেকানিজম নেই। সাধারণত HashMap বা অন্য Collections ব্যবহার করে caching পরিচালিত হয়।
- Guava Enhancements:
- Guava
CacheAPI উন্নত caching মেকানিজম প্রদান করে (e.g., LRU caching, time-based eviction)। - এটি memory-efficient এবং ব্যবহার করা সহজ।
- Guava
Example: Caching in Guava
import com.google.common.cache.*;
import java.util.concurrent.TimeUnit;
public class GuavaCache {
public static void main(String[] args) {
Cache<String, String> cache = CacheBuilder.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES)
.maximumSize(100)
.build();
cache.put("key", "value");
System.out.println(cache.getIfPresent("key")); // Output: value
}
}
তুলনা:
- Java Core Libraries caching-এর জন্য সরাসরি কোনও API প্রদান করে না।
- Guava
CacheBuilderউন্নত এবং কাস্টমাইজড caching সমর্থন করে।
4. Preconditions and Validation
- Java Core Libraries:
- Java Core-এ সাধারণত
if-elseএবংthrowব্যবহার করে প্রি-কন্ডিশন চেক করতে হয়।
- Java Core-এ সাধারণত
- Guava Enhancements:
- Guava
Preconditionsক্লাস চেকিং এবং কোড পরিষ্কার রাখতে সাহায্য করে।
- Guava
Example: Preconditions
import com.google.common.base.Preconditions;
public class GuavaPreconditions {
public static void main(String[] args) {
int value = -1;
Preconditions.checkArgument(value > 0, "Value must be positive!");
}
}
তুলনা:
- Java Core-এ ম্যানুয়াল কন্ডিশন চেক কোড বড় এবং জটিল হতে পারে।
- Guava
Preconditionsএকটি লাইনেই validation সহজ করে।
5. Strings Manipulation
- Java Core Libraries:
- Java Core-এ
String,StringBuilder, এবংStringJoinerরয়েছে।
- Java Core-এ
- Guava Enhancements:
- Guava
Stringsক্লাস অতিরিক্ত স্ট্রিং অপারেশন যেমন null-safe চেকিং, padding, এবং splitting প্রদান করে।
- Guava
Example: Strings Utility
import com.google.common.base.Strings;
public class GuavaStrings {
public static void main(String[] args) {
String input = null;
System.out.println(Strings.isNullOrEmpty(input)); // Output: true
}
}
তুলনা:
- Guava
Stringsক্লাস null-handling সহজ করে। - Java Core-এ null চেক করার জন্য ম্যানুয়াল কোড প্রয়োজন।
6. Functional Programming Support
- Java Core Libraries:
- Java Core (Java 8+)
StreamAPI,Optional, এবং Lambda Expressions প্রদান করে।
- Java Core (Java 8+)
- Guava Enhancements:
- Guava
Function,Predicate, এবংFluentIterableক্লাসগুলো functional programming-এর জন্য Java Core API-কে পরিপূর্ণ করে।
- Guava
Example: FluentIterable
import com.google.common.collect.FluentIterable;
public class GuavaFluentIterable {
public static void main(String[] args) {
FluentIterable<Integer> numbers = FluentIterable.from(java.util.List.of(1, 2, 3, 4))
.filter(num -> num % 2 == 0);
numbers.forEach(System.out::println); // Output: 2, 4
}
}
তুলনা:
- Java Core Streams API Guava-এর functional utilities-এর চেয়ে আরও শক্তিশালী।
- Guava pre-Java 8-এর জন্য functional API প্রদান করেছিল।
Guava এবং Java Core Libraries-এর পার্থক্য
| ফিচার | Java Core Libraries | Guava |
|---|---|---|
| Collections | Mutable এবং Immutable (Java 9+) | Mutable এবং Immutable (Java 9-এর আগে) |
| Caching | সরাসরি নেই | Built-in Cache API |
| Concurrency | Basic (Future, Executors) | ListenableFuture, Futures API |
| Validation | Basic | Preconditions API |
| String Utilities | Limited | Extensive |
| Functional Support | Streams, Lambdas (Java 8+) | FluentIterable, Function, Predicate |
- Guava Java Core Libraries-এর সীমাবদ্ধতাগুলি কাটিয়ে উঠতে সাহায্য করে এবং অতিরিক্ত ফিচার প্রদান করে।
- Guava Core Libraries-এর উপর ভিত্তি করেই কাজ করে, তবে আরও উচ্চ-স্তরের abstraction এবং সুবিধা দেয়।
- Java 8+ এ Streams এবং Optional যোগ হওয়ার পর কিছু ক্ষেত্রে Guava-এর প্রয়োজনীয়তা কমে গেছে, তবে caching, concurrency, এবং Immutable Collections-এর জন্য এটি এখনও অপরিহার্য।
Content added By
Read more